home *** CD-ROM | disk | FTP | other *** search
/ System Booster / System Booster.iso / Archives / ForCLI / 0Utils13.lha / 0Utils / WB_Delete.c < prev    next >
C/C++ Source or Header  |  1995-03-20  |  4KB  |  199 lines

  1.  
  2. /******************************************************************************
  3.  
  4.     MODULE
  5.     WB_Delete.c
  6.  
  7.     DESCRIPTION
  8.     Delete a file and it's .info File and delete
  9.     its DiskObject on WB.
  10.  
  11.     NOTES
  12.     Kickstart 2.0+ required
  13.     compiles w/ SAS/C v6.51
  14.  
  15.     BUGS
  16.     none known
  17.  
  18.     TODO
  19.     implement recursion and wildcards
  20.  
  21.  
  22.     TEST!!!!!!!!!!
  23.     DeleteDO.c verwendete:
  24.         if (!file.info)
  25.         touch file.info
  26.         deletediskobject(file)
  27.         if (touched file.info)
  28.         delete(file.info)
  29.     das deutet an, dass deletediskobject
  30.     ein file.info dringend braucht.
  31.     aber das löschte nur das diskobject,
  32.     weder file, noch file.info
  33.  
  34.  
  35.     EXAMPLES
  36.  
  37.     SEE ALSO
  38.  
  39.     INDEX
  40.  
  41.     HISTORY
  42.     12-02-95 b_noll created
  43.     20-02-95 b_noll restructured source
  44.     21-02-95 b_noll added version/format-prefix/offset
  45.     20-03-95 b_noll added args diagnostics
  46.  
  47.     AUTHOR
  48.     Bernd Noll, Brunnenstrasse 55, D-67661 Kaiserslautern
  49.     b_noll@informatik.uni-kl.de
  50.  
  51. ******************************************************************************/
  52.  
  53. /**************************************
  54.         Includes
  55. **************************************/
  56.  
  57. #ifndef   EXEC_LIBRARIES_H
  58. # include <exec/libraries.h>
  59. #endif /* EXEC_LIBRARIES_H */
  60.  
  61. #ifndef   CLIB_EXEC_PROTOS_H
  62. # include <clib/exec_protos.h>
  63. #endif /* CLIB_EXEC_PROTOS_H */
  64.  
  65. #ifndef   DOS_DOS_H
  66. # include <dos/dos.h>
  67. #endif /* DOS_DOS_H */
  68.  
  69. #ifndef   CLIB_DOS_PROTOS_H
  70. # include <clib/dos_protos.h>
  71. #endif /* CLIB_DOS_PROTOS_H */
  72.  
  73. #include <proto/dos.h>
  74. #include <proto/exec.h>
  75.  
  76. /* ******************** USER INCLUDES ******************** */
  77.  
  78. #ifndef   CLIB_ICON_PROTOS_H
  79. # include <clib/icon_protos.h>
  80. #endif /* CLIB_ICON_PROTOS_H */
  81.  
  82. #include <proto/icon.h>
  83. #include <string.h>
  84.  
  85. /* ******************** USER INCLUDES ******************** */
  86.  
  87. /**************************************
  88.      Defines & Structures
  89. **************************************/
  90.  
  91. #ifndef ABSEXECBASE
  92. #define ABSEXECBASE ((struct ExecBase **)4L)
  93. #endif
  94.  
  95. struct _arg {
  96. /* ******************** USER FORMAT ******************** */
  97. #define FORMAT "FILE/M/A,ONLYICONS/S"
  98.  
  99.     STRPTR* file;
  100.     ULONG   onlyIcons;
  101.  
  102. #define ICONNAME "icon.library"
  103.  
  104. /* ******************** USER FORMAT ******************** */
  105. }; /* struct _argv */
  106.  
  107. #define MAXPATHLEN 256
  108. #define MAXLINELEN 256
  109.  
  110. #define VERSIONPREFIX    "\0$VER: "
  111. #define VERSIONOFFSET    0
  112. #define FORMATPREFIX    "\0$ARG: "
  113. #define FORMATOFFSET    7
  114.  
  115. /**************************************
  116.         Implementation
  117. **************************************/
  118.  
  119. long _main (void)
  120. {
  121.     const char      * version = VERSIONPREFIX "WB_Delete 1.2 " __AMIGADATE__ + VERSIONOFFSET;
  122.     long        retval  = RETURN_FAIL;
  123.     struct ExecBase*SysBase = *ABSEXECBASE;
  124.     struct Library* DOSBase;
  125.     struct Library* IconBase;
  126.  
  127.     if (DOSBase = OpenLibrary (DOSNAME, 37)) {
  128.     struct _arg    argv    = { 0 };
  129.     APTR args;
  130.     retval     = RETURN_ERROR;
  131.     if (args = (void*)ReadArgs(FORMATPREFIX FORMAT + FORMATOFFSET, (LONG*)&argv, NULL)) {
  132. /* ******************** USER BODY ******************** */
  133.  
  134.         long cnt;
  135.         UBYTE buffer [MAXPATHLEN];
  136.         BPTR lock;
  137.  
  138.         if (IconBase = OpenLibrary(ICONNAME, 37)) {
  139.  
  140.         retval = RETURN_OK;
  141.  
  142.         for (cnt = 0; argv.file[cnt] && !retval; ++cnt) {
  143.  
  144.             buffer[0] = 0;
  145.             strcat (buffer, argv.file[cnt]);
  146.  
  147.             /* ---- Delete the main file */
  148.  
  149.             if (!argv.onlyIcons)
  150.             if (lock = Lock(buffer, SHARED_LOCK)) {
  151.             UnLock(lock);
  152.  
  153.             if (!DeleteFile(buffer)) {
  154.                 retval = RETURN_ERROR;
  155.                 break;
  156.             } /* if */
  157.             } /* if */
  158.  
  159.  
  160.             /* ---- Delete the Icon and the .info file */
  161.             /*        we delete file.info and diskobject separately, */
  162.             /*        'cause else we get probs w/ defdiskobjects */
  163.  
  164.             strcat (buffer, ".info");
  165.  
  166.             if (lock = Lock(buffer, SHARED_LOCK)) {
  167.             UnLock(lock);
  168.  
  169.             if (!DeleteFile(buffer)) {
  170.                 retval = RETURN_ERROR;
  171.                 break;
  172.             } /* if */
  173.             } /* if */
  174.  
  175.             /* ---- The rc is always FALSE 'cause of FileNotFound */
  176.             DeleteDiskObject(argv.file[cnt]);
  177.  
  178.         } /* for */
  179.  
  180.         CloseLibrary (IconBase);
  181.         } /* if */
  182.  
  183. /* ******************** USER BODY ******************** */
  184.         FreeArgs (args);
  185.     } /* if */
  186.  
  187.     if (retval > RETURN_WARN)
  188.         PrintFault(IoErr(), "WB_Delete");
  189.  
  190.     CloseLibrary (DOSBase);
  191.     } /* if */
  192.     return (retval);
  193. } /* _main */
  194.  
  195. /******************************************************************************
  196. *****  END WB_Delete.c
  197. ******************************************************************************/
  198.  
  199.